/*
*Copyright 2021-2023 NERCIS
*
*Licensed under the Apache License, Version 2.0 (the "License");
*you may not use this file except in compliance with the License.
*You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*Unless required by applicable law or agreed to in writing, software
*distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*See the License for the specific language governing permissions and
*limitations under the License.
*/

package cn.ac.nercis.pes.model.standard;

import cn.ac.nercis.pes.common.annotation.CheckField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 系统测评基本信息类
 *
 * @author zpy
 * @version 1.0.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SystemEvaluationSDTO {

    private String id;
    @CheckField(name = "本次被测信息系统与定级系统是否一致", isBoolean = true)
    private Boolean isChange;
    @CheckField(name = "变化情况说明")
    private String changeDesc;

    @CheckField(name = "是否为关键信息基础设施")
    private String ciiState;
    @CheckField(name = "所属安全保护工作部门")
    private String ciiDesc;
    @CheckField(name = "网络安全等级保护测评情况")
    private String gradeProtectionState;
    @CheckField(name = "测评机构名称")
    private String evaluationUnitName;
    @CheckField(name = "测评时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate evaluationDate;
    @CheckField(name = "测评结论")
    private String conclusion;

    @CheckField(name = "服务范围")
    private String serviceRange;
    @CheckField(name = "跨省个数")
    private Integer interProvincialCount;
    @CheckField(name = "跨地个数")
    private Integer interAreaCount;
    @CheckField(name = "服务范围其他")
    private String serviceRangeDesc;
    @CheckField(name = "服务领域")
    private String serviceScope;
    @CheckField(name = "服务领域其他")
    private String serviceScopeDesc;
    @CheckField(name = "服务对象")
    private String serviceObject;
    @CheckField(name = "服务对象其他")
    private String serviceObjectDesc;

    @CheckField(name = "覆盖范围")
    private String coverage;
    @CheckField(name = "覆盖范围其他")
    private String coverageDesc;
    @CheckField(name = "网络性质")
    private String networkNature;
    @CheckField(name = "网络性质其他")
    private String networkNatureDesc;
    @CheckField(name = "系统服务用户数量")
    private String serviceUserCount;

    @CheckField(name = "系统是否已投入运行", isBoolean = true)
    private Boolean isRunning;
    @CheckField(name = "投入运行（年）")
    private String runYear;
    @CheckField(name = "投入运行（月）")
    private String runMonth;
    @CheckField(name = "投入运行（目前情况）")
    private String runDesc;

    @CheckField(name = "系统互联情况")
    private String interconnection;
    @CheckField(name = "系统互联情况其他")
    private String interconnectionDesc;
    @CheckField(name = "互联系统名称")
    private String netName;


    @CheckField(name = "系统是否依赖不在本系统范围内的云平台运行")
    private String cloudState;
    @CheckField(name = "云平台名称")
    private String cloudName;
    @CheckField(name = "云平台评估状态")
    private String cloudSelectState;
    @CheckField(name = "密评机构名称")
    private String cloudUnit;
    @CheckField(name = "评估时间")
    private LocalDate cloudDate;
    @CheckField(name = "评估结论")
    private String cloudCon;
    @CheckField(name = "系统是否具有密码应用方案")
    private String paScheme;
    @CheckField(name = "评审通过时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate passDate;
    @CheckField(name = "评审方式")
    private String paSchemeMethod;
    @CheckField(name = "密评机构名称")
    private String paSchemeUnit;

    @CheckField(name = "系统使用的密码产品情况")
    private String ppSituation;
    @CheckField(name = "使用密码产品数")
    private Integer ppSituationCount;
    @CheckField(name = "独立使用密码产品数")
    private Integer ppSituationIndependentCount;
    @CheckField(name = "共享使用密码产品数")
    private Integer ppSituationSharedCount;
    @CheckField(name = "取得认证证书的密码产品数")
    private Integer ppSituationCertifiedCount;
    @CheckField(name = "未取得认证证书的密码产品数")
    private Integer ppSituationUnCertifiedCount;
    @CheckField(name = "国外的密码产品数")
    private Integer ppSituationForeignCount;

    @CheckField(name = "分组算法")
    private String groupingAlgorithm;
    @CheckField(name = "其他分组算法")
    private String groupingAlgorithmDesc;
    @CheckField(name = "非对称算法")
    private String asymmetricAlgorithm;
    @CheckField(name = "其他非对称算法")
    private String asymmetricAlgorithmDesc;
    @CheckField(name = "杂凑算法")
    private String hashAlgorithm;
    @CheckField(name = "其他杂凑算法")
    private String hashAlgorithmDesc;
    @CheckField(name = "序列算法")
    private String sequenceAlgorithm;
    @CheckField(name = "其他序列算法")
    private String sequenceAlgorithmDesc;
    @CheckField(name = "其他算法")
    private String otherAlgorithmDesc;

    private LocalDateTime createTime;
    private LocalDateTime modifyTime;
}